package cn.tedu._05weibo.controller;

import cn.tedu._05weibo.mapper.UserMapper;
import cn.tedu._05weibo.pojo.dto.UserLoginDTO;
import cn.tedu._05weibo.pojo.dto.UserRegDTO;
import cn.tedu._05weibo.pojo.entity.User;
import cn.tedu._05weibo.pojo.vo.UserVo;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpSession;
import java.util.Date;

@RestController
@RequestMapping("/v1/users/")
public class UserController {
    @Autowired
    private UserMapper userMapper;

    /**
     * 1.注册功能
     *
     * @param userRegDTO
     * @return
     */
    @PostMapping("reg")
    public int reg(@RequestBody UserRegDTO userRegDTO) {
        /*
        1.接受客户端传递的数据
        2.校验数据的合法性[此处暂时不校验]
        3.确定用户名是否被占用[SELECT接口]
           3.1如果被占用，return 2
           3.2如果没有被占用，[insert接口]，return 1
         */
        //1.用户名是否被占用
        String username = userRegDTO.getUsername();
        UserVo userVo = userMapper.selectByUsername(username);
        if (userVo != null) {//被占用
            return 2;
        }
        //未被占用
        User user = new User();
        BeanUtils.copyProperties(userRegDTO, user);
        user.setCreated(new Date());
        int insert = userMapper.insert(user);
        //注册成功
        return 1;
    }

    /**
     * 登录功能
     */

    @PostMapping("login")
    public int login(@RequestBody UserLoginDTO userLoginDTO, HttpSession session) {
        System.out.println("userLoginDTO = " + userLoginDTO);
        /*
        1)接收数据
        2)判断是正确 return 1
        3)如果用户错误 return 3
           如果密码错误return 2
         */
        String username = userLoginDTO.getUsername();
        UserVo userVo = userMapper.selectByUsername(username);
        if (userVo == null) {
            return 3; //用户名错误
        }
        if (userVo.getPassword().equals(userLoginDTO.getPassword())) {
            //保存该用户的session会话到服务区内存中
            session.setAttribute("user", userVo);
            return 1; //正确登录
        }
        return 2; //用户名或密码错误
    }

    /**
     * 获取当前用户功能
     */
    @GetMapping("currentUser")
    public UserVo currentUser(HttpSession session) {
        //在服务器内存中，获取会话标识
        UserVo userVo = (UserVo) session.getAttribute("user");
        return userVo;
    }

    /**
     * 退出登录
     * (在服务器的内存中删除会话)
     *   1）登陆成功
     *   2）获取当前用户
     *   3）退出登录
     *   4）获取当前用户--无数据
     */
    @GetMapping("logout")
    public void logout(HttpSession session) {
        //删除会话标识
        session.removeAttribute("user");
    }


}

